package br.com.ericogr.hanoi.controle;

import java.util.List;

import android.view.SurfaceHolder;
import br.com.ericogr.hanoi.entidade.Entidade;
import br.com.ericogr.hanoi.tarefa.Tarefa;
import br.com.ericogr.hanoi.tarefa.TarefaGraficaMovePrato;
import br.com.ericogr.hanoi.tarefa.TarefaLogicaMovePrato;

public class ControladorMovePrato implements Controlador {
    private SurfaceHolder mSurfaceHolder;
    private Tarefa mTarefaGrafica;
    private Tarefa mTarefaLogica;
    private List<Entidade> mEntidades;
    
    public ControladorMovePrato(SurfaceHolder surfaceHolder, List<Entidade> entidades) {
        mSurfaceHolder = surfaceHolder;
        mEntidades = entidades;
    }
    
    @Override
    public void iniciar(int screenWidth, int screenHeight) {
        if (mTarefaGrafica != null && mTarefaLogica != null) {
            parar();
        }
        
        inicializaEntidades(screenWidth, screenHeight);
        
        mTarefaGrafica = new TarefaGraficaMovePrato(mSurfaceHolder, mEntidades);
        mTarefaLogica = new TarefaLogicaMovePrato(mEntidades);
        
        mTarefaGrafica.iniciar();
        mTarefaLogica.iniciar();
    }

    @Override
    public void pausar() {
        mTarefaGrafica.parar();
        mTarefaLogica.parar();
    }
    
    @Override
    public void continuar() {
        mTarefaGrafica.iniciar();
        mTarefaLogica.iniciar();
    }
    
    @Override
    public void parar() {
        mTarefaGrafica.parar();
        mTarefaLogica.parar();
    }
    
    @Override
    public void evento(EventoControle eventoControle) {
        synchronized(this) {
            for (Entidade entidade : mEntidades) {
                entidade.processamentoEvento(eventoControle);
            }
        }
    }
    
    private void inicializaEntidades(int screenWidth, int screenHeight) {
        for (Entidade entidade : mEntidades) {
            entidade.configuraResolucao(screenWidth, screenHeight);
        }
    }
    
}